[メンバーズ向け]既存のAWSアカウントにセキュアアカウント設定を一部導入してみた(リージョン限定、コスト優先)
クラスメソッドのAWS請求代行サービスでは、 AWSのクラウドサービスを活用したセキュリティリスクの抑制、軽減を実現したAWSアカウントを、セキュアアカウントとして提供しています。
2022年8月時点の 弊社ポータルサイト(メンバーズポータル)を利用した、既存AWSアカウントへのセキュアカウント設定と、 AWSコスト抑制のため、対象リージョンや、利用するAWSサービスの絞り込みを実施する機会がありましたので、紹介させていただきます。
メンバーズポータル設定
メンバーズポータルサイトに管理者権限を持つユーザでログインしました。
AWSアカウント指定
対象AWSアカウントを選択しました
メンバーズサービス設定
メンバーズサービス設定 「設定する」 を選択しました
セキュリティ設定
「セキュリティ設定を選択しました
共通設定
追加料金なく利用できる共通設定は、すべて有効化しました。
- パスワードポリシー
- AWS Access Analyzer
- AWS Compute Optimizer
AWSの推奨よりも強固なパスワードポリシーを設定済みの場合、デグレードを避けるため、パスワードポリシーは無効なままご利用ください。
[IAM.7] Password policies for IAM users should have strong configurations
ベーシック設定
クラスメソッドメンバーズのAWSアカウントの初期設定相当を維持するベーシック設定は、有効としました。
- AWS CloudTrail (ベーシック設定)
- AWS Config (ベーシック設定)
CloudTrail、Config 設定をカスタマイズしている場合、上書きによるデグレードを避けるためベーシック設定は「無効」のままご利用ください。
セキュア設定
以下の設定を有効化「保存」しました。
- Amazon EventBridge通知設定
- Amazon GuardDuty
- AWS Security Hub
今回AWSコストの抑制を優先するため、以下の設定は見送りました。
- AWS CloudTrail(セキュア設定): KMSのキー料金(1USD x リージョン)が発生
- AWS Config(セキュア設定) : 全てのリソース記録に伴うConfig料金の増加回避
- EBSデフォルト暗号化 : スナップショット管理コスト全般の回避。
- Amazon Detective : 対象ログに応じた従量課金(1GB毎に2USD)回避
待機
設定したセキュア設定の反映(自動メンテナンス)まで一週間待機します。
※自動メンテナンス、2022年8月時点では、日本時間の土曜日AM2時台に実施されます。
一部セキュア設定の解除
無料期間の経過後、Security Hub のコストがAWS利用費に占める割合が多いことが確認されました。
今回、AWSコストの抑制を優先するため、未使用リージョン(東京、バージニア)以外の GuardDuty、 Security Hub については 無効化しました。
CLI
CloudShellを利用し、AWSCLを実行しました。
$ aws --version aws-cli/2.7.25 Python/3.9.11 Linux/4.14.287-215.504.amzn2.x86_64 exec-env/CloudShell exe/x86_64.amzn.2 prompt/off $ jq --version jq-1.5
- securityhub、guardduty、detective の無効化 (東京、バージニア以外)
aws ec2 describe-regions --query Regions[*].RegionName \ | jq -r '.[]' \ | grep -v -e 'ap-northeast-1' -e 'us-east-1' \ | while read REGION do echo "${REGION}" # securityhub disable aws --region ${REGION} securityhub disable-security-hub # guardduty no-enable aws --region ${REGION} guardduty list-detectors --query DetectorIds[*] | jq -r .[] \ | while read DETECTORID do aws --region ${REGION} guardduty update-detector --detector-id ${DETECTORID} --no-enable done # detective detective aws detective list-graphs --region "${REGION}" | jq -r .GraphList[].Arn \ | while read GRAPH_ARN do aws --region ${REGION} detective delete-graph --graph-arn "${GRAPH_ARN}" done done
- 東京、バージニアリージョンの設定確認
aws ec2 describe-regions --query Regions[*].RegionName \ | jq -r '.[]' \ | grep -e 'ap-northeast-1' -e 'us-east-1' \ | while read REGION do echo "# ${REGION}" echo "## securityhub" aws --region ${REGION} securityhub describe-hub echo "## guardduty" aws --region ${REGION} guardduty list-detectors --query DetectorIds[*] | jq -r .[] \ | while read DETECTORID do aws --region ${REGION} guardduty get-detector --detector-id ${DETECTORID} done echo "## detective" aws detective list-graphs --region "${REGION}" | jq -r .GraphList[].Arn \ | while read GRAPH_ARN do aws --region ${REGION} detective list-members --graph-arn "${GRAPH_ARN}" done done
セキュア設定の解除
メンバーズポータルの自動メンテナンスにより、GuardDuty、 Security Hub が再設定される事を避けるため、セキュア設定のチェックを外し「保存」しました。
特定リージョンに限定して設定した GuardDuty、 Security Hub、 AWSのベストプラクティスとしては全リージョンでの利用が推奨されています。
月額コストが許容できる場合には、なるべく無効化しない事をおすすめします。
請求アラーム
GuardDuty、 Security Hub を利用しないリージョンで、AWSアカウントの不正利用を早期検出するため、 追加費用なく利用できる、メンバーズポータルの請求アラームとAWSコスト異常検出を設定しました。
まとめ
今回の設定対象としたAWSアカウントは CloudFront、AWS WAF、S3を利用したWeb配信用の環境でしたが、 AWS利用費の総額に占めるセキュアアカウントのコスト、1割台で利用する事ができました。
より小規模、関係者が少ないシステムで、 Security Hub の機能がオーバースペックである場合には、GuardDutyなどの通知については別途実装 (EventBridge+Chatbot等)。 セキュリティ状況を把握する利用する必要性が生じた時にSecurityHubを有効化し、オンデマンド利用するといった節約も可能と思われます。。
今回、メンバーズポータルを利用したセキュアアカウントの設定、維持コストの抑制までを紹介させていただきました。
セキュアアカウントの実際の活用、Security Hubの検出結果の確認や、実施した改善などについては、改めて紹介させて頂きたいと思います。